ユーザー固有のGコード機能
ザル CNC11_CustomFunctions.project
サンプルプロジェクトは、のインストールディレクトリにあります。 CODESYS 下に ..\CODESYS SoftMotion\Examples
。
この例は、Gコードの式で使用する独自の関数を作成する方法を示しています。
Gコードの式と関数の詳細については、以下を参照してください。 式.ここには、デフォルトでサポートされているすべての演算子と関数のリストが表示されます。
この例では以下のように定義しています。 SEL IEC 61131-3のオペレータなので、Gコードでも使用できます。
アプリケーションの構造
CNC アプリケーションではよくあることですが、このアプリケーションにはパス処理が含まれます (CNC_PreparePath
プログラム) と補間 ()CNC
プログラム)。補間は他の例と変わらないため、このトピックについてはここではこれ以上説明しません
パス処理は、低優先度では 20 ミリ秒ごとに周期的に呼び出されます。 PathTask
。高優先度では、補間は 4 ミリ秒ごとに周期的に呼び出されます MotionTask
。バックグラウンドタスク VISU_TASK
ビジュアライゼーション用に定義されています。
ビジュアライゼーションでは、Gコードの処理を開始して変数の値を設定できます $LONGLINE$
。G コードと機械の動き (3D ガントリー) がビジュアライゼーションの右側に表示されます
Gコード
CNC
LET #WIDTH : LREAL N10 G36 O#WIDTH D SEL($LONGLINE$, 40, 110) N20 F50 E100 E-100 N30 G01 X#WIDTH Y#WIDTH Z#WIDTH/2 N40 Y-#WIDTH N50 X-#WIDTH Z-#WIDTH/2 N60 Y#WIDTH N70 X0 Y0 Z0
1行目:ローカル変数の宣言 #WIDTH
タイプの LREAL
。
2行目、ブロックN10: の値の割り当て SEL($LONGLINE$, 40, 110)
変数に #WIDTH
。PLC 変数の値の場合 $LONGLINE$
は TRUE
その場合、式の値は 110 です。それ以外の場合は 40 です。
次の行では、Z 方向にさらに移動した長方形がトラバースされます。長方形の片側の長さは 2*#WIDTH
。
の実装 SEL
ファンクション

ユーザー定義関数を作成するには、以下を実装する関数ブロックを作成する必要があります。 SMC_NC_IFunction
インターフェイス。
詳細については、以下を参照してください。 SMC_NC_IFunction。
GetSignature
。戻り値の型、カウント、および関数の引数の型がここに返されます。この例では、SEL
関数は次の型の値を返します。T_OTHER
と、3 つのタイプの引数がありますT_BOOL
、T_OTHER
、およびT_OTHER
。T_OTHER
任意のタイプを表す (いずれかT_BOOL
、T_LREAL
、またはT_STRING
]。の 3 つの出現すべてT_OTHER
同じタイプでなければなりません。METHOD GetSignature VAR_OUTPUT resultType : SMC_GVar_Type; nNumArguments : UDINT; pType : POINTER TO SMC_GVar_Type; END_VAR VAR argTypes : ARRAY[0..2] OF SMC_GVar_Type := [SMC_GVar_Type.T_BOOL, SMC_GVar_Type.T_OTHER, SMC_GVar_Type.T_OTHER]; END_VAR resultType := SMC_GVAR_Type.T_OTHER; nNumArguments := 3; pType := ADR(argTypes);
Call
: このメソッドは、G コードの処理中に呼び出されます。引数はを介して渡されますpa
入力。エクスプレッションpa[0].argValue.bValue
番目の引数のブール値にアクセスするために使用されます。2 番目の引数の型によって異なります。pa[1].argType
、結果は戻り値です。result.argType
そして CASE ステートメントへの分岐。METHOD Call VAR_IN_OUT result : SMC_NC_GArgument; END_VAR VAR_INPUT pa : POINTER TO SMC_NC_GArgument; END_VA RVAR_OUTPUT eError : SMC_ERROR; END_VAR VAR g : BOOL; END_VAR g := pa[0].argValue.bValue; result.argType := pa[1].argType; CASE result.argType OF SMC_GVAR_Type.T_BOOL: result.argValue.bValue := SEL(g, pa[1].argValue.bValue, pa[2].argValue.bValue); SMC_GVAR_Type.T_STRING: result.argValue.sValue := SEL(g, pa[1].argValue.sValue, pa[2].argValue.sValue); SMC_GVAR_Type.T_LREAL: result.argValue.fValue := SEL(g, pa[1].argValue.fValue, pa[2].argValue.fValue); ELSE eError := SMC_INVALID_PARAMETER; END_CASE
の構成 SMC_ReadNCFile2
のインスタンス CNC_Sel
ファンクションブロックは、に作成されます。 GVL_CNCFunctions
グローバル変数リスト。
配列 aCNCFunctions
長さ 1 は関数ブロックの名前とインスタンスで初期化されます。その後、この配列はテーブル内でリンクされます。 funTable
タイプの SMC_NC_GFunctionTable
。
aCNCFunctions : ARRAY[0..0] OF SMC_NC_GFunction := [(stName:= 'SEL', iFunc:= GVL_CNCFunctions.g_Sel)]; funTable : SMC_NC_GFunctionTable := (numFunctions:= 1, pFunction:= ADR(aCNCFunctions)) ;
最後に、このテーブルはに渡されます SMC_ReadNCFile2
ファンクションブロック:
rncf2 : SMC_ReadNCFile2 := (bParenthesesAsComments:= FALSE); [...] rncf2( bExecute:= TRUE, sFileName:= sFileName, pCustomFunTable:= ADR(funTable), pvl:= ADR(varList));
コミッショニング
アプリケーションをビルドし、コントローラーにダウンロードします。
アプリケーションを起動し、ビジュアライゼーションに切り替えて、を押します
Start
。Longline
変数の値を設定するラジオボタン$LONGLINE$
GコードでTRUE
またはFALSE
。